# 1. 基础入门
# Windows 下搭建 Go 开发环境-安装和配置 SDK
# SDK
- SDK 的全称 (Software Development Kit 软件开发工具包)
- SDK 是提供给开发人员使用的,其中包含了对应开发语言的工具包
# 下载 SDK 工具包
- Go 语言的官网为:golang.org , 因为各种原因,可能无法访问。
- SDK 下载地址:Golang 中国 https://www.golangtc.com/download
- 如何选择对应的 sdk 版本
# windows 下安装 sdk
- Windows 下 SDK 的各个版本说明: Windows 下:根据自己系统是 32 位还是 64 位进行下载:
- 位系统:go1.14.6.windows-386.zip
- 位系统:go1.14.6.windows-amd64.zip
- 请注意:安装路径不要有中文或者特殊符号如空格等
# windows 下配置 Golang 环境变量
配置环境变量介绍:根据 windows 系统在查找可执行程序的原理,可以将 Go 所在路径定义到环境变量中,让系统帮我 们去找运行执行的程序,这样在任何目录下都可以执行 go 指令
在 Go 开发中,需要配置哪些环境变量:
环境变量 | 内容 | 说明 |
---|---|---|
GOROOT | c:/go | 指定SDK的安装路径:c:/go |
GOPATH | c:/GO_MSG | GO项目的路径 |
Path | %GOROOT%\bin | 添加SDK的/bin目录 |
# Go 语言入门
需求:要求开发一个 hello.go 程序,可以输出 "hello,world”
开发的步骤:开发这个程序/项目时,go 的目录结构怎么处理
>GO_MSG # 工作目录 >>src # 原代码存储目录 >>>go_code # 代码存储目录 >>>>project1 # 一个项目目录 >>>>>main # project1项目中的main目录 >>>>>package # project1项目中的package目录
代码如下:
package main //表示该 hello.go 文件所在的包是 main, 在 go 中,每个文件都必须归属于一个包。 import "fmt" //表示:引入一个包,包名 fmt, 引入该包后,就可以使用 fmt 包的函数,比如:fmt.Println func main() { //func 是一个关键字,表示一个函数, main 是函数名,是一个主函数,即我们程序的入口 fmt.Println("hello,MSG") //表示调用 fmt 包的函数 Println 输出 “hello,MSG” }
通过 go build 命令对该 go 文件进行编译,生成 .exe 文件.
先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有 go 开发环境的机器上,仍然可以运行
// cmd打开,进入go目录,c:/GO_MSG/src/go_code/project1/main go build hello.go //执行后就会生成hello.exe文件在当前目录
运行 hello.exe 文件即可
hello.exe
注意:通过 go run 命令可以直接运行 hello.go 程序 [类似执行一个脚本文件的形式]
直接 go run go 源代码,那么如果要在另外一个机器上这么运行,也需要 go 开发环境,否则无法执行。
// cmd打开,进入go目录,c:/GO_MSG/src/go_code/project1/main go run hello.go
go build报错注意
// 报错内容 go: cannot find main module; see 'go help modules' 解决方案: 在当前目录下执行:go mod init
# Go开发编辑器
Go采用的是UTF-8编码的文本文件存放源代码,理论上使用任何一款文本编辑器都可以做Go语言开发,这里推荐使用VS Code
和Goland
。 VS Code
是微软开源的编辑器,而Goland
是jetbrains出品的付费IDE。
这里以VS Code
加插件做为go语言的开发工具来举例
# VS Code介绍
VS Code
全称Visual Studio Code
,是微软公司开源的一款免费现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比 Diff、GIT 等特性,支持插件扩展,支持 Win、Mac 以及 Linux平台。
虽然不如某些IDE功能强大,但是它添加Go扩展插件后已经足够胜任我们日常的Go开发
# 下载安装
VS Code
官方下载地址:https://code.visualstudio.com/Download
三大主流平台都支持,请根据自己的电脑平台选择对应的安装包
# 安装中文简体插件
点击左侧菜单栏最后一项管理扩展
,在搜索框
中输入chinese
,选中结果列表第一项,点击install
安装。
安装完毕后右下角会提示重启VS Code
,重启之后你的VS C
# VSCode
主界面介绍:
# 安装go扩展
现在我们要为我们的VS Code编辑器安装Go
扩展插件,让它支持Go语言开发
# Go 程序开发的注意事项
- Go 源文件以 "go" 为扩展名。
- Go 应用程序的执行入口是 main()函数。 这个是和其它编程语言(比如 java/c)
- Go 语言严格区分大小写。
- Go 方法由一条条语句构成,每个语句后不需要分号(Go 语言会在每行后自动加分号),这也体现出 Golang 的简洁性。
- Go 编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一个,否则报错
- go 语言定义的变量或者 import 的包如果没有使用到,代码不能编译通过。
- 大括号都是成对出现的,缺一不可
# Go 语言的转义字符(escape char)
说明:常用的转义字符有如下:
- \t : 表示一个制表符,通常使用它可以排版
- \n :换行符
- \ \:一个\
- \" :一个"
- \r :一个回车 fmt.Println("天龙八部雪山飞狐\r 张飞");
# 注释(comment)
介绍注释:
- 用于注解说明解释程序的文字就是注释,注释提高了代码的阅读性
- 注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。
Golang 中注释有两种形式
- 行注释 :// 注释内容
块注释(多行注释)
/*
注释内容
*/
使用细节
- 对于行注释和块注释,被注释的文字,不会被 Go 编译器执行。
- 块注释里面不允许有块注释嵌套 [注意一下]
# 规范的代码风格
正确的注释和注释风格
- Go 官方推荐使用行注释来注释整个方法和语句。
- 带看 Go 源码
正确的缩进和空白
- 使用一次 tab 操作,实现缩进,默认整体向右边移动,时候用 shift+tab 整体向左移
- 或者使用 gofmt 来进行格式化 [演示]
运算符两边习惯性各加一个空格
- 比如:2 + 4 * 5。
Go 语言的代码风格
package main
import "fmt"
func main() {
fmt.Println("hello,world!")
}
//上面的写法是正确的.
package main
import "fmt"
func main() {
fmt.Println("hello,world!")
}
//上面的写法不是正确,Go 语言不允许这样编写。 【Go 语言不允许这样写,是错误的!】
Go 设计者思想
- 一个问题尽量只有一个解决方法
- 一行最长不超过 80 个字符,超过的请使用换行展示,尽量保持格式优雅
# 第一个GO程序
package main1 // 包,表明代码所在的模块(包)
import "fmt" // 引入代码依赖
// 功能实现
func main() {
fmt.Println("Hello World!")
}
# go install
go install
表示安装的意思,它先编译源代码得到可执行文件,然后将可执行文件移动到GOPATH
的bin目录下。因为我们的环境变量中配置了GOPATH
下的bin目录,所以我们就可以在任意地方直接执行可执行文件了。
# 跨平台编译
默认我们go build
的可执行文件都是当前操作系统可执行的文件,如果我想在windows下编译一个linux下可执行文件,那需要怎么做呢?
只需要指定目标操作系统的平台和处理器架构即可:
SET CGO_ENABLED=0 // 禁用CGO,为什么要禁用CGO,因为使用了cgo的代码是不支持跨平台编译的
SET GOOS=linux // 目标平台是linux
SET GOARCH=amd64 // 目标处理器架构是amd64
然后再执行go build
命令,得到的就是能够在Linux平台运行的可执行文件了。
Mac 下编译 Linux 和 Windows平台 64位 可执行程序:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Linux 下编译 Mac 和 Windows 平台64位可执行程序:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
Windows下编译Mac平台64位可执行程序:
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build
# GO程序本身 - 原理
GO代码是使用包来组织的,包类似于其他语言中的库和模块。
一个包由一个或多个.go源文件组成,放在一个文件目录中,该文件目录的名字应该描述了包的作用,也充当了包引用的初始变量名称(可变)。
每个源文件的开始都用package来声明,如果是package main
,那么指明了这个文件是属于那个包(主包)。
后面跟着它导入的其他包的列表,然后是存储在文件中的程度声明
名为main的包比较特殊,它是用来定义一个独立可执行的程序,而不是库,可以当成是整个程序的主入口。
我们需要告诉编译器源文件需要那么包,用package声明后面的import来导入这些包。
import声明必须要在package声明之后
# GO程序入口
- 必须引入 main 包:package main
- 必须是 main 方法:func main()
- 目录名跟文件名不一定是 main/main.go
# GO程序退出返回码
- Go 中 main 函数不支持任何返回值
- 通过 os.Exit 来返回状态:os.Exit正常的返回值为0
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("hello world")
os.Exit(-1)
}
结果:
C:\GO_MSG\src\test>go run host.go
hello world
exit status 4294967295
# GO程序获取命令行参数
- main 函数不支持传入参数: func main(arg []string)
- 在程序中直接通过 os.Args 获取命令行参数
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("hello world")
fmt.Println(os.Args)
os.Exit(-1)
}
结果:
hello world
[C:\Users\admin\AppData\Local\Temp\go-build733291642\b001\exe\host.exe 111]
exit status 4294967295
# 结合使用
package main
import (
"fmt"
"os"
)
func main() {
if len(os.Args) > 1 {
fmt.Println("在本程序下获取第一位参数:", os.Args[1])
os.Exit(0)
}
os.Exit(-1)
}
不带参数执行结果:
C:\GO_MSG\src\test>go run host.go
exit status 4294967295
带参数执行结果:
C:\GO_MSG\src\test>go run host.go 111
在本程序下获取第一位参数: 111
# 小结和提示
学习编程最容易犯的错是语法错误 。Go 要求你必须按照语法规则编写代码。如果你的程序违反了 语法规则,例如:忘记了大括号、引号,或者拼错了单词,Go 编译器都会报语法错误,要求:尝试着去看懂编译器会报告的错误信息。
← 介绍 2. GO的依赖管理 →